/**
 * plan B
 *
 * 1、开发编写类似于如下代码
 * class TestMopB extends AbsClass {...
 *
 * 2、 程序将函数类加载到ClassLoader中。
 *
 * 3、在函数库中注册。或者导出语法糖。
 * 3.1 functionMap.add(getFuncName(),testMopB.&execute)
 * 3.2 def prettify = testMopB.&execute
 *
 * 4、 调用方直接调用prettify("aaaaa") 即可
 */
abstract class AbsClass{
    abstract String getFuncName()
    abstract String executeInner(Map<String,Object> context,String modelCode)
    String execute(Map<String,Object> context,String modelCode){
        long s = System.currentTimeMillis();
        def result = executeInner(context,modelCode)
        long e = System.currentTimeMillis();
        long duration = e - s;
        println(" MOP耗费时间：" + duration);
        return result;
    }
}

class TestMop extends AbsClass {
    @Override
    String getFuncName() {
        return "prettify"
    }

    @Override
    String executeInner(Map<String, Object> context, String modelCode) {
        return "abc${modelCode}bcd";
    }
}
TestMop testMopB = new TestMop();
def prettify = testMopB.&execute

print(prettify(null,"111"));